function demo_expand() {
    var ref = $('#jstree_demo').jstree(true);
    sel = ref.get_selected(true);
    if (!sel.length) {
        return false;
    }
    sel = sel[0];
    ref.open_all(sel.id);
}

function demo_create_group(){
    var ref = $('#jstree_demo').jstree(true);
    sel=ref.create_node( '#', {'type':'group'});
    sel=ref.get_node(sel);
    if(sel){
        ref.edit(sel);
    };
}

function demo_create() {
    var ref = $('#jstree_demo').jstree(true),
        sel = ref.get_selected(true);
    if (!sel.length) {
        return false;
    }
    sel = sel[0];
    var child = ref.get_children_dom(sel.id);
    var node;
    if (!child.length) {
        // alert("shit");
    } else {
        for (var i = 0; i < child.length; i++) {
            node = ref.get_node(child[i].id);
            if (node.type == 'user') {
                alertify
                    .alert("Tạo khu vực",
                        "Khu vực này đã tồn tại thiết bị. Không thể tạo khu vực con!")
                    .setting({
                        transition: 'flipx',
                        'onok': function() {
                            alertify.error('Tạo khu vực thất bại');
                        }
                    }).show();
                return;
            }
        }
    }
    sel = ref.create_node(sel, {
        "type": "group"
    });
    if (sel) {
        ref.edit(sel);
        // alert(sel);
    }
};

function demo_rename() {
    var ref = $('#jstree_demo').jstree(true),
        sel = ref.get_selected();
    if (!sel.length) {
        return false;
    }
    sel = sel[0];
    ref.edit(sel);
    // alert(sel.id);
};

function get_bottom() {
    var ref = $('#jstree_demo').jstree(true);
    sel = ref.get_selected(true);
    var rs = [];
    var node = [];
    node.push(sel[0]);
    do {
        var child = node.pop();
        if (ref.is_leaf(child)) {
            rs.push(child);
            //alert(child.text);
        } else {
            //alert(ref.is_leaf(child));
            arrChild = ref.get_children_dom(child.id);

            for (var i = 0; i < arrChild.length; i++) {
                node.push(ref.get_node(arrChild[i]));
            }
        }
    } while (node.length > 0);
    return rs;
};

function demo_delete() {
    alertify
        .confirm("Chắc chắn xóa khu vực/nhánh khu vực này?")
        .autoCancel(5)
        .setting(
            'onok',
            function() {
                var bool;
                var user_exist;
                user_exist = false;
                do {
                    bool = true;
                    var ref = $('#jstree_demo').jstree(true),
                        sel = get_bottom();
                    if (!sel.length) {} else {
                        var index;
                        for (index = 0; index < sel.length; ++index) {
                            if (sel[index].type == 'user') {
                                user_exist = true;
                            } else {
                                bool = false;
                                ref.delete_node(sel[index]);
                                alertify.success("Xóa thành công " + sel[index].text);
                                $.vakata.context.hide();
                            }
                        }
                    }
                } while (bool == false);
                if (user_exist) {
                    alertify
                        .alert(
                            "Xóa khu vực/nhánh khu vực",
                            "Phát hiện thiết bị trong nhánh khu vực này! Hệ thống đã xóa những khu vực không tồn tại thiết bị!")
                        .setting({
                            transition: 'flipx'
                        }).show();
                }
            });
};

function demo_delete_user() {
    alertify
        .confirm("Chắc chắn xóa thiết bị này?")
        .autoCancel(5)
        .setting(
            'onok',
            function() {
                var ref = $('#jstree_demo').jstree(true),
                    sel = ref.get_selected(true);
                if (!sel.length) {} else {
                    sel = sel[0];
                    alertify.success('Xóa thành công: ' + sel.text);
                    $.ajax({
                        url: "/vnpt-qavah/dev-front-end/database/todb.php",
                        type: 'POST',
                        data: {
                            type: "delete_user",
                            id: sel.id,
                        },
                        success: function() {
                            ref.refresh();
                        },
                        error: function() {
                            alertify
                                .alert("Thông báo",
                                    "Xóa thất bại!")
                                .setting({
                                    transition: 'flipx',
                                    'onok': function() {
                                        alertify
                                            .error('Xóa thất bại');
                                    }
                                }).show();
                        }
                    });
                }
            });
}

$(function() {
    $.vakata.context.hide_on_mouseleave = true;
    var to = false;
    $('#demo_q').keyup(function() {
        //alert("test");
        if (to) {
            clearTimeout(to);
        }
        to = setTimeout(function() {
            var v = $('#demo_q').val();
            $('#jstree_demo').jstree(true).search(v);
        }, 250);
    });
    $('#demo2_q').keyup(function() {
        if (to) {
            clearTimeout(to);
        }
        to = setTimeout(function() {
            var v = $('#demo2_q').val();
            $('#jstree2_demo').jstree(true).search(v);
        }, 250);
    });

    $('#jstree_demo')
        .jstree({
            "core": {
                "animation": 0,
                "multiple": true,
                "check_callback": function(op, node, par, pos,
                    more) {},
                "themes": {
                    "stripes": false,
                    "name": 'default',
                    "responsive": true
                },
                'data': {
                    'url': "/vnpt-qavah/dev-front-end/database/fromdb.php",
                    'type': 'POST',
                    'dataType': 'JSON',
                    'data' : function (node) {
                                return { id : node.id };
                            }
                }
            },
            "rules": {
                multitree: true,
                draggable: "all"
            },
            "types": {
                "#": {
                    "max_children": 100,
                    "max_depth": 100,
                    "icon": "lib/images/tree_icon.png",
                    "valid_children": ["group"]
                },
                /*"root": {
                    "icon": "lib/images/tree_icon.png",
                    "valid_children": ["group"]
                },*/
                "group": {
                    "icon": "/vnpt-qavah/dev-front-end/assets/images/domain.png",
                    "valid_children": ["group", "user"]
                },
                "user": {
                    "icon": "/vnpt-qavah/dev-front-end/assets/images/device.png",
                    "valid_children": []
                }
            },
            "plugins": ["checkbox", "contextmenu", "dnd",
                "search", "sort", "types", "unique", "state",
                "themes"
            ],
            "search": {
                "fuzzy": false,
                "show_only_matches": false
            },
            "dnd": {
                "copy": false
            },
            "checkbox": {
                "three_state": false
                    // "three_state" : true
                    // "cascade" : "down"
            },
            "state": {
                "key": "maintree"
            },
            "contextmenu": {
                "show_at_node": false,
                "items": function($node) {
                    if (this.get_type($node) == "user") {
                        return {
                            "Details": {
                                "label": '<div class="lW">x<span class="sc">E</span>m thông tin thiết bị<span class="hotkey">M</span></div>',
                                "shortcut": 69,
                                "shortcut_label": 'M',
                                "icon": "glyphicon glyphicon-list-alt",
                                "action": function(obj) {
                                    demo_ShowDetails(false);
                                }
                            },
                            "Edit": {
                                "label": '<div class="lW"><span class="sc">S</span>ửa thông tin thiết bị<span class="hotkey">S</span></div>',
                                "shortcut": 83,
                                "shortcut_label": 'S',
                                "icon": "glyphicon glyphicon-pencil",
                                "action": function(obj) {
                                    demo_ShowDetails(true);
                                }
                            },
                            "Delete": {
                                "label": '<div class="lW"><span class="sc">X</span>óa thiết bị<span class="hotkey">X</span></div>',
                                "shortcut": 88,
                                "icon": 'glyphicon glyphicon-trash',
                                "action": function(obj) {
                                    // this.remove(obj);
                                    demo_delete_user();
                                }
                            }
                        };
                    } else {
                        if ($node.parent != '#') {
                            return {
                                "Expand": {
                                    "label": '<div class="lW">mở <span class="sc">R</span>ộng<span class="hotkey">R</span></div>',
                                    "shortcut": 82,
                                    "icon": "glyphicon glyphicon-zoom-in",
                                    "action": function(node) {
                                        // $("#" + node.id).jstree(
                                        // 'open_all');
                                        // }
                                        demo_expand();
                                    }
                                },
                                "Create": {
                                    "icon": "glyphicon glyphicon-plus",
                                    "label": '<div class="lW">tạo khu vực <span class="sc">C</span>on<span class="hotkey">C</span></div>',
                                    "shortcut": 67,
                                    "action": function() {
                                        // this.create(obj);
                                        demo_create();
                                    }
                                },
                                "Details": {
                                    "label": '<div class="lW">x<span class="sc">E</span>m thông tin khu vực<span class="hotkey">E</span></div>',
                                    "shortcut": 69,
                                    "shortcut_label": 'M',
                                    "icon": "glyphicon glyphicon-list-alt",
                                    "action": function(obj) {
                                        demo_ShowDetails(false);
                                    }
                                },
                                "Edit": {
                                    "label": '<div class="lW"><span class="sc">S</span>ửa thông tin khu vực<span class="hotkey">S</span></div>',
                                    "shortcut": 83,
                                    "shortcut_label": 'S',
                                    "icon": "glyphicon glyphicon-pencil",
                                    "action": function(obj) {
                                        demo_ShowDetails(true);
                                    }
                                },
                                "Delete": {
                                    "label": '<div class="lW"><span class="sc">X</span>óa khu vực<span class="hotkey">X</span></div>',
                                    "shortcut": 88,
                                    "icon": 'glyphicon glyphicon-trash',
                                    "action": function(obj) {
                                        // this.remove(obj);
                                        demo_delete();
                                    }
                                }
                            };
                        } else {
                            return {
                                "Expand": {
                                    "label": '<div class="lW">mở <span class="sc">R</span>ộng<span class="hotkey">R</span></div>',
                                    "shortcut": 82,
                                    "icon": "glyphicon glyphicon-zoom-in",
                                    "action": function(node) {
                                        // $("#" + node.id).jstree(
                                        // 'open_all');
                                        // }
                                        demo_expand();
                                    }
                                },
                                "Create": {
                                    "icon": "glyphicon glyphicon-plus",
                                    "label": '<div class="lW">tạo khu vực <span class="sc">C</span>on<span class="hotkey">C</span></div>',
                                    "shortcut": 67,
                                    "action": function() {
                                        // this.create(obj);
                                        demo_create_group();
                                    }
                                }
                            };
                        }
                    }
                }
            }
        })
        .bind(
            "rename_node.jstree",
            function(e, data) {
                $
                    .ajax({
                        url: "/vnpt-qavah/dev-front-end/database/todb.php",
                        type: 'POST',
                        data: {
                            type: "update",
                            id: data.node.id,
                            parent: data.node.parent,
                            name: data.node.text
                        },
                        success: function() {
                            alertify
                                .success('Cập nhật thành công: ' + data.node.text);
                        },
                        error: function() {
                            alertify
                                .alert("Thông báo",
                                    "Cập nhật thất bại!")
                                .setting({
                                    transition: 'flipx',
                                    'onok': function() {
                                        alertify
                                            .error('Cập nhật thất bại');
                                    }
                                }).show();
                        }
                    });
                return;
            })
        .bind("select_node.jstree", function(e, data) {
            var ref = $('#jstree_demo').jstree(true);
            var evt = window.event || event;
            var button = evt.which || evt.button;

            if (button != 1 && (typeof button != "undefined")) {
                if (ref.is_selected(data.node)) {
                    sel = ref.get_selected(true);
                    if (!sel.length) {
                        return false;
                    }
                    for (var i = 0; i < sel.length; i++) {
                        if (sel[i].id != data.node.id) {
                            ref.deselect_node(sel[i]);
                        }
                    }
                }
            } else {
                if (data.node.type != 'user') {
                    if (ref.is_selected(data.node)) {
                        sel = ref.get_selected(true);
                        if (!sel.length) {
                            return false;
                        }
                        for (var i = 0; i < sel.length; i++) {
                            if (sel[i].id != data.node.id) {
                                ref.deselect_node(sel[i]);
                            }
                        }
                    }
                } else {
                    if (ref.is_selected(data.node)) {
                        sel = ref.get_selected(true);
                        if (!sel.length) {
                            return false;
                        }
                        for (var i = 0; i < sel.length; i++) {
                            if (sel[i].type != 'user') {
                                ref.deselect_node(sel[i]);
                            }
                        }
                    }
                }
            }
            return;
        })
        .bind('dblclick', '.jstree-anchor', function() {
            demo_ShowDetails();
        })
        /*.bind(
            "create_node.jstree",
            function(e, data) {
                $
                    .ajax({
                        url: "/vnpt-qavah/dev-front-end/database/todb.php",
                        type: 'POST',
                        data: {
                            type: "insert",
                            id: data.node.id,
                            parent: data.node.parent,
                            name: data.node.text
                        },
                        success: function() {
                            // alert("Insert Success");
                        },
                        error: function() {
                            alertify
                                .alert("Thông báo",
                                    "Thêm mới thất bại!")
                                .setting({
                                    transition: 'flipx',
                                    'onok': function() {
                                        alertify
                                            .error('Thêm mới thất bại');
                                    }
                                }).show();
                        }
                    });
                return;
            })*/
        .bind(
            "delete_node.jstree",
            function(e, data) {
                $
                    .ajax({
                        url: "/vnpt-qavah/dev-front-end/database/todb.php",
                        type: 'POST',
                        data: {
                            type: function() {
                                if (data.node.type == "user") {} else {
                                    return "delete";
                                }
                            },
                            id: data.node.id
                        },
                        success: function() {
                            //alertify.closeAll();
                            alertify.confirm().autoCancel(0);
                        },
                        error: function() {
                            alertify.alert("Thông báo",
                                "Xóa thất bại!").setting({
                                transition: 'flipx',
                                'onok': function() {
                                    alertify.error('Xóa thất bại');
                                }
                            }).show();
                        }
                    });
                return;
            })
        .bind(
            "move_node.jstree",
            function(e, data) {
                var ref = $('#jstree_demo').jstree(true);
                var child = ref.get_children_dom(data.node.parent);
                if (data.node.type == 'user') {
                    /*for (var i = 0; i < child.length; i++) {
                        node = ref.get_node(child[i].id);
                        if (node.type != 'user') {
                            alertify
                                .alert("Di chuyển thiết bị",
                                    "Khu vực này đã có khu vực con. Không thể di chuyển thiết bị vào đây!")
                                .setting({
                                    transition: 'flipx',
                                    'onok': function() {
                                        alertify
                                            .error('Di chuyển thất bại');
                                    }
                                }).show();
                            ref.refresh();
                            return;
                        }
                    }*/
                } else {
                    for (var i = 0; i < child.length; i++) {
                        node = ref.get_node(child[i].id);
                        if (node.type == 'user') {
                            alertify
                                .alert(
                                    "Di chuyển khu vực/nhánh khu vực",
                                    "Khu vực này đã tồn tại thiết bị. Không thể di chuyển khu vực khác vào đây!")
                                .setting({
                                    transition: 'flipx',
                                    'onok': function() {
                                        alertify
                                            .error('Di chuyển thất bại');
                                    }
                                }).show();
                            ref.refresh();
                            return;
                        }
                    }
                }
                alert(data.node.id+data.node.parent+data.node.type);
                $
                    .ajax({
                        url: "/vnpt-qavah/dev-front-end/database/todb.php",
                        type: 'POST',
                        data: {
                            type: function() {
                                if (data.node.type == "user") {
                                    return "move_user";
                                } else {
                                    return "move_node";
                                }
                            },
                            id: data.node.id,
                            parent: data.node.parent
                        },
                        success: function(result) {
                            alert(result);
                            alertify
                                .success('Di chuyển thành công');
                        },
                        error: function() {
                            alertify
                                .alert("Thông báo",
                                    "Di chuyển thất bại!")
                                .setting({
                                    transition: 'flipx',
                                    'onok': function() {
                                        alertify
                                            .error('Di chuyển thất bại');
                                    }
                                }).show();
                        }
                    });
                return;
            })
        .bind(
            "copy_node.jstree",
            function(e, data) {
                var ref = $('#jstree_demo').jstree(true);
                var ref2 = $('#jstree2_demo').jstree(true);
                var child = ref.get_children_dom(data.node.parent);
                if (data.node.type == 'user') {
                    for (var i = 0; i < child.length; i++) {
                        node = ref.get_node(child[i].id);
                        if (node.type != 'user') {
                            alertify
                                .alert("Di chuyển thiết bị",
                                    "Không thể di chuyển thiết bị vào khu vực đã có khu vực con!")
                                .setting({
                                    transition: 'flipx',
                                    'onok': function() {
                                        alertify
                                            .error('Di chuyển thất bại');
                                    }
                                }).show();
                            ref.refresh();
                            ref2.refresh();
                            return;
                        }
                    }
                }
                $
                    .ajax({
                        url: "/vnpt-qavah/dev-front-end/database/todb.php",
                        type: 'POST',
                        data: {
                            type: "move_user",
                            id: data.original.id,
                            parent: data.node.parent
                        },
                        success: function() {
                            alertify
                                .success('Di chuyển thành công');
                        },
                        error: function() {
                            alertify
                                .alert("Thông báo",
                                    "Di chuyển thất bại")
                                .setting({
                                    transition: 'flipx',
                                    'onok': function() {
                                        alertify
                                            .error('Di chuyển thất bại');
                                    }
                                }).show();
                        }
                    });
                return;
            }).bind('select_node.jstree', function(e, data) {
            data.instance.open_node(data.node);
        })
        .bind("hover_node.jstree", function(e, data) {
            //$("#" + data.node.id).prop('title', data.node.id);
            //$(this).prop('title', data.node.id);
            Tip(data.node.id, DELAY, 0,BGCOLOR,'#428BCA',FONTCOLOR,'#FFFFFF',FONTWEIGHT,'BOLD');
        }).bind("dehover_node.jstree", function(e, data) {
            UnTip();
        });
    
});
